/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Clases;

import Persistencia.Convenio;
import Persistencia.Usuario;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import negocio.ConvenioInterface;
import negocio.UsuarioInterface;

/**
 *
 * @author Angel
 */
@ManagedBean
public class LoginBean implements Serializable {

    private Persistencia.Usuario usuario;
    @EJB
    private UsuarioInterface usuarioSessionBean;
    @EJB
    private ConvenioInterface convenioSessionBean;
    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    private boolean objetivoInicialB;
    private boolean seguimientoBitacoraSemanalB;
    private boolean seguimientoInformeMensualB;
    private boolean calificacionDesempenoB;
    private boolean evaluacionFinalLogrosB;
    private boolean informeFinalPracticaB;
    private boolean resumenSemestralPracticaProfesionalB;
    private boolean consultaResumenSemestralPracticaProfesionalB;
    private boolean seguimientoTelefonicoPracticaB;
    private boolean listaseguimientoTelefonicoPracticaB;
    private boolean visibleMenu;
    private final int ROL_COORDINADOR = 2;
    private final int ROL_SUPERVISOR_UNIVERSITARIO = 3;
    private final int ROL_SUPERVISOR_ENTIDAD = 4;
    private final int ROL_PRACTICANTE = 5;

    /**
     * En el login carga el usuario en la sesión
     *
     * @param actionEvent
     */
    @PostConstruct
    public void init() {
        if (sessionBean.getUsuarioSession() != null) {
            usuario = sessionBean.getUsuarioSession();
            cargarMenuRol(usuario);
        } else {
            usuario = new Usuario();
        }
    }

    /**
     * Método que hace la validación del login del usuario
     *
     * @return Menu inicial si fue existoso el ingreso
     */
    public String ingresarBitakora() {
        List<Convenio> convenios = new ArrayList<Convenio>();
        usuario = usuarioSessionBean.validarLogin(new Usuario(usuario.getIdUsuario(), usuario.getClave()));
        if (usuario != null) {
            if (usuario.getIdRol().getIdRol() == ROL_PRACTICANTE) {
                convenios.add(convenioSessionBean.consultarConvenio(usuario.getEstudiante()));
                usuario.getEstudiante().setConvenioList(convenios);
            }
            sessionBean.setUsuarioSession(usuario);
            cargarMenuRol(usuario);
            visibleMenu = true;
            return "Menu";
        } else {
            FacesMessage msg = new FacesMessage("El usuario y/o contraseña ingresados no son correctos", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            return "";
        }
    }

    /**
     * Habilita el menú correspondiente al usuario que ingreso al sistema
     */
    public void cargarMenuRol(Usuario usuarioRol) {
        switch (usuarioRol.getIdRol().getIdRol()) {
            case ROL_COORDINADOR:
                objetivoInicialB = true;
                seguimientoBitacoraSemanalB = true;
                seguimientoInformeMensualB = true;
                calificacionDesempenoB = true;
                evaluacionFinalLogrosB = true;
                informeFinalPracticaB = true;
                resumenSemestralPracticaProfesionalB = true;
                consultaResumenSemestralPracticaProfesionalB = true;
                seguimientoTelefonicoPracticaB = true;
                listaseguimientoTelefonicoPracticaB = true;
                break;

            case ROL_SUPERVISOR_UNIVERSITARIO:
                objetivoInicialB = true;
                seguimientoBitacoraSemanalB = true;
                seguimientoInformeMensualB = true;
                calificacionDesempenoB = false;
                evaluacionFinalLogrosB = true;
                informeFinalPracticaB = true;
                resumenSemestralPracticaProfesionalB = true;
                seguimientoTelefonicoPracticaB = true;
                listaseguimientoTelefonicoPracticaB = true;
                break;

            case ROL_SUPERVISOR_ENTIDAD:
                objetivoInicialB = true;
                seguimientoBitacoraSemanalB = false;
                seguimientoInformeMensualB = true;
                calificacionDesempenoB = true;
                evaluacionFinalLogrosB = false;
                informeFinalPracticaB = false;
                resumenSemestralPracticaProfesionalB = true;
                seguimientoTelefonicoPracticaB = false;
                break;

            case ROL_PRACTICANTE:
                objetivoInicialB = true;
                seguimientoBitacoraSemanalB = true;
                seguimientoInformeMensualB = true;
                calificacionDesempenoB = true;
                evaluacionFinalLogrosB = true;
                informeFinalPracticaB = true;
                resumenSemestralPracticaProfesionalB = true;
                consultaResumenSemestralPracticaProfesionalB = true;
                seguimientoTelefonicoPracticaB = false;
                break;
        }

    }

    public String cerrarSesion() {
        visibleMenu = true;
        HttpSession httpSession = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        if (httpSession != null) {
            httpSession.invalidate();
        }
        return "RegistroUsuario";
    }

    public String cargarSeguimientoBitacoraSemanal() {
        return "SeguimientoBitacoraSemanal";
    }

  

    public SessionBean getSessionBean() {
        return sessionBean;
    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public UsuarioInterface getUsuarioSessionBean() {
        return usuarioSessionBean;
    }

    public void setUsuarioSessionBean(UsuarioInterface usuarioSessionBean) {
        this.usuarioSessionBean = usuarioSessionBean;
    }

    public ConvenioInterface getConvenioSessionBean() {
        return convenioSessionBean;
    }

    public void setConvenioSessionBean(ConvenioInterface convenioSessionBean) {
        this.convenioSessionBean = convenioSessionBean;
    }

    public boolean isObjetivoInicialB() {
        return objetivoInicialB;
    }

    public void setObjetivoInicialB(boolean objetivoInicialB) {
        this.objetivoInicialB = objetivoInicialB;
    }

    public boolean isSeguimientoBitacoraSemanalB() {
        return seguimientoBitacoraSemanalB;
    }

    public void setSeguimientoBitacoraSemanalB(boolean seguimientoBitacoraSemanalB) {
        this.seguimientoBitacoraSemanalB = seguimientoBitacoraSemanalB;
    }

    public boolean isSeguimientoInformeMensualB() {
        return seguimientoInformeMensualB;
    }

    public void setSeguimientoInformeMensualB(boolean seguimientoInformeMensualB) {
        this.seguimientoInformeMensualB = seguimientoInformeMensualB;
    }

    public boolean isCalificacionDesempenoB() {
        return calificacionDesempenoB;
    }

    public void setCalificacionDesempenoB(boolean calificacionDesempenoB) {
        this.calificacionDesempenoB = calificacionDesempenoB;
    }

    public boolean isEvaluacionFinalLogrosB() {
        return evaluacionFinalLogrosB;
    }

    public void setEvaluacionFinalLogrosB(boolean evaluacionFinalLogrosB) {
        this.evaluacionFinalLogrosB = evaluacionFinalLogrosB;
    }

    public boolean isInformeFinalPracticaB() {
        return informeFinalPracticaB;
    }

    public void setInformeFinalPracticaB(boolean informeFinalPracticaB) {
        this.informeFinalPracticaB = informeFinalPracticaB;
    }

    public boolean isResumenSemestralPracticaProfesionalB() {
        return resumenSemestralPracticaProfesionalB;
    }

    public void setResumenSemestralPracticaProfesionalB(boolean resumenSemestralPracticaProfesionalB) {
        this.resumenSemestralPracticaProfesionalB = resumenSemestralPracticaProfesionalB;
    }

    public boolean isSeguimientoTelefonicoPracticaB() {
        return seguimientoTelefonicoPracticaB;
    }

    public void setSeguimientoTelefonicoPracticaB(boolean seguimientoTelefonicoPracticaB) {
        this.seguimientoTelefonicoPracticaB = seguimientoTelefonicoPracticaB;
    }

    public boolean isVisibleMenu() {
        return visibleMenu;
    }

    public void setVisibleMenu(boolean visibleMenu) {
        this.visibleMenu = visibleMenu;
    }

    public boolean isConsultaResumenSemestralPracticaProfesionalB() {
        return consultaResumenSemestralPracticaProfesionalB;
    }

    public void setConsultaResumenSemestralPracticaProfesionalB(boolean consultaResumenSemestralPracticaProfesionalB) {
        this.consultaResumenSemestralPracticaProfesionalB = consultaResumenSemestralPracticaProfesionalB;
    }

    public boolean isListaseguimientoTelefonicoPracticaB() {
        return listaseguimientoTelefonicoPracticaB;
    }

    public void setListaseguimientoTelefonicoPracticaB(boolean listaseguimientoTelefonicoPracticaB) {
        this.listaseguimientoTelefonicoPracticaB = listaseguimientoTelefonicoPracticaB;
    }
    
}
